float cullPlane(
    vector p)
{
  return p[1] >= -0.502 ? p[1] + 0.5 : 20.0;

}


vector pMod(
    vector p,
    vector size)
{

  vector pmod = p;

  if(size[0] > 0.0) pmod[0] = mod(p[0] + size[0] * 0.5, size[0]) - size[0] * 0.5;

  if(size[1] > 0.0) pmod[1] = mod(p[1] + size[1] * 0.5, size[1]) - size[1] * 0.5;

  if(size[2] > 0.0) pmod[2] = mod(p[2] + size[2] * 0.5, size[2]) - size[2] * 0.5;

  return pmod;

}

float sdSphere(
    vector p,
    float s)
{

  return length(p) - s;

}

float opUnionRound(
    float a,
    float b,
    float r)
{

  float e = max(r - abs(a - b), 0.0);

  return min(a, b) - e * e * 0.25 / r;

}


shader OslGeometry(
    vector spherePos = vector(1,1,1),
    output color c = 0)
{

    float tmpComb_6 = opUnionRound(
        cullPlane(
            pMod(
                transform(matrix(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0),P),
                vector(-5.0,-5.0,-5.0)
            )
        ) * 1.0,
        sdSphere(
            pMod(
                transform(matrix(1.0,0.0,0.0,spherePos[0],
                                 0.0,1.0,0.0,spherePos[1],
                                 0.0,0.0,1.0,spherePos[2],
                                 0.0,0.0,0.0,1.0), P),
                vector(-5.0,-5.0,-5.0)
            ),
        0.4) * 1.0,
        2.1);

    c = color(tmpComb_6);


    vector pos = P;
}
